/**********************************************************************************************/
// dgt_Element.h
// Interface of element
// 
// Copyright Diamant Group 2008
/**********************************************************************************************/
#ifndef _DGT_ELEMENT_H_
#define _DGT_ELEMENT_H_

#include "dgtKernel.h"
#include "dgt_SmartMacros.h"
#include "dgt_Circuit.h"

SMART_CLASS( dgt_Element );

/**********************************************************************************************/
interface dgt_Element
{
							dgt_Element( void )		{};

virtual						~dgt_Element( void )	{};

// Name of element
virtual wxString			get_Name( void ) = 0;

// Count of outputs
virtual	unsigned long		get_DataInputCount( void ) = 0;
virtual unsigned long		get_DataOutputCount( void ) = 0;
virtual unsigned long		get_ServiceInputCount( void ) = 0;
virtual wxArrayString		get_ServiceInputNames( void ) = 0;


// FOR LOGIC ELEMENTS

virtual	wxString			get_Mnemonic( void )	{	return wxEmptyString; };
// Number of elements in one schema
virtual unsigned long		get_BlockCount( void )	{	return 0; };
// Number of inputs of 1 element
virtual	unsigned long		get_InputCount( void )	{	return 0; };					
// Function table of element
virtual	wxArrayShort		get_Table( void )		{	return wxArrayShort(); };

// FOR MEM ELEMENTS

// Number of bits
virtual unsigned long		get_BitCount( void )	{ return 0;};
// Number of operations
virtual unsigned long		get_OpCount( void )		{ return 0;};
// Operations names
virtual wxArrayString		get_OpNames( void )		{ return wxArrayString(); };
// Mnemonic names
virtual wxArrayString		get_MnemNames( void )	{ return wxArrayString(); };

// FOR OPER ELEMENTS

// Number of bits of operand
virtual unsigned long		get_BitCountOperand( void )	{ return 0;};
// Number of bits of result
virtual unsigned long		get_BitCountResult( void )	{ return 0;};
// Number of operands
virtual unsigned long		get_OperandCount( void )	{ return 0;};

// Synchron or asynchron trigger
virtual	bool				get_Syncro( void )		{ return false;};
// Number of elements in 1 block
virtual unsigned long		get_BCount( void )		{ return 0;};
// Number of inputs of 1 trigger block
virtual unsigned long		get_ICount( void )		{ return 0; };
// Get input sygnals for required jump ( from begValue to endValue )
virtual wxArrayShort		get_InpSygnals( bool begValue, bool endValue )	{ return wxArrayShort();};

// FOR CIRCUIT ELEMENTS
virtual	dgt_Circuit_Ptr		get_Circuit( void )		
	{ return	static_cast<dgt_Circuit_Ptr>(NULL); };

virtual	wxArrayString		get_Dependies( void )
	{ return	wxArrayString( NULL );	};
};

#endif	// _DGT_ELEMENT_H_11

